<?php namespace Modules\Shop\Http\Controllers;


class GoodsController extends Controller
{

    public function getIndex()
    {
        global $_CFG, $ecs, $err, $smarty, $_LANG, $db;

        $affiliate = unserialize($GLOBALS['_CFG']['affiliate']);
        \Tpl::assign('affiliate', $affiliate);

        /*------------------------------------------------------ */
        //-- INPUT
        /*------------------------------------------------------ */

        $goods_id = is_set(\Input::get('id')) ? intval(\Input::get('id')) : 0;

        /*------------------------------------------------------ */
        //-- 改变属性、数量时重新计算商品价格
        /*------------------------------------------------------ */

        if (\Input::get('act') && \Input::get('act') == 'price') {
            //include('includes/cls_json.php');

            $json = new \JSON;
            $res = array('err_msg' => '', 'result' => '', 'qty' => 1);

            $attr_id = is_set(\Input::get('attr')) ? explode(',', \Input::get('attr')) : array();
            $number = (is_set(\Input::get('number'))) ? intval(\Input::get('number')) : 1;

            if ($goods_id == 0) {
                $res['err_msg'] = $_LANG['err_change_attr'];
                $res['err_no'] = 1;
            } else {
                if ($number == 0) {
                    $res['qty'] = $number = 1;
                } else {
                    $res['qty'] = $number;
                }

                $shop_price = get_final_price($goods_id, $number, true, $attr_id);
                $res['result'] = price_format($shop_price * $number);
            }

            die($json->encode($res));
        }


        /*------------------------------------------------------ */
        //-- 商品购买记录ajax处理
        /*------------------------------------------------------ */

        if (\Input::get('act') && \Input::get('act') == 'gotopage') {
            //include('includes/cls_json.php');

            $json = new \JSON;
            $res = array('err_msg' => '', 'result' => '');

            $goods_id = is_set(\Input::get('id')) ? intval(\Input::get('id')) : 0;
            $page = (is_set(\Input::get('page'))) ? intval(\Input::get('page')) : 1;

            if (!empty($goods_id)) {
                $need_cache = $GLOBALS['smarty']->caching;
                $need_compile = $GLOBALS['smarty']->force_compile;

                $GLOBALS['smarty']->caching = false;
                $GLOBALS['smarty']->force_compile = true;

                /* 商品购买记录 */
                $sql = 'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status ' .
                    'FROM ' . $ecs->table('order_info') . ' AS oi LEFT JOIN ' . $ecs->table('users') . ' AS u ON oi.user_id = u.user_id, ' . $ecs->table('order_goods') . ' AS og ' .
                    'WHERE oi.order_id = og.order_id AND ' . time() . ' - oi.add_time < 2592000 AND og.goods_id = ' . $goods_id . ' ORDER BY oi.add_time DESC LIMIT ' . (($page > 1) ? ($page - 1) : 0) * 5 . ',5';
                $bought_notes = $db->getAll($sql);

                foreach ($bought_notes as $key => $val) {
                    $bought_notes[ $key ]['add_time'] = local_date("Y-m-d G:i:s", $val['add_time']);
                }

                $sql = 'SELECT count(*) ' .
                    'FROM ' . $ecs->table('order_info') . ' AS oi LEFT JOIN ' . $ecs->table('users') . ' AS u ON oi.user_id = u.user_id, ' . $ecs->table('order_goods') . ' AS og ' .
                    'WHERE oi.order_id = og.order_id AND ' . time() . ' - oi.add_time < 2592000 AND og.goods_id = ' . $goods_id;
                $count = $db->getOne($sql);


                /* 商品购买记录分页样式 */
                $pager = array();
                $pager['page'] = $page;
                $pager['size'] = $size = 5;
                $pager['record_count'] = $count;
                $pager['page_count'] = $page_count = ($count > 0) ? intval(ceil($count / $size)) : 1;;
                $pager['page_first'] = "javascript:gotoBuyPage(1,$goods_id)";
                $pager['page_prev'] = $page > 1 ? "javascript:gotoBuyPage(" . ($page - 1) . ",$goods_id)" : 'javascript:;';
                $pager['page_next'] = $page < $page_count ? 'javascript:gotoBuyPage(' . ($page + 1) . ",$goods_id)" : 'javascript:;';
                $pager['page_last'] = $page < $page_count ? 'javascript:gotoBuyPage(' . $page_count . ",$goods_id)" : 'javascript:;';

                \Tpl::assign('notes', $bought_notes);
                \Tpl::assign('pager', $pager);


                $res['result'] = $GLOBALS['smarty']->fetch('library/bought_notes.lbi');

                $GLOBALS['smarty']->caching = $need_cache;
                $GLOBALS['smarty']->force_compile = $need_compile;
            }

            die($json->encode($res));
        }


        /*------------------------------------------------------ */

        //-- PROCESSOR

        /*------------------------------------------------------ */

        $cache_id = $goods_id . '-' . $_SESSION['user_rank'] . '-' . $_CFG['lang'];
        $cache_id = sprintf('%X', crc32($cache_id));
        if (!\Tpl::is_cached('goods.dwt', $cache_id)) {
            \Tpl::assign('image_width', $_CFG['image_width']);
            \Tpl::assign('image_height', $_CFG['image_height']);
            \Tpl::assign('helps', get_shop_help()); // 网店帮助
            \Tpl::assign('id', $goods_id);
            \Tpl::assign('type', 0);
            \Tpl::assign('cfg', $_CFG);
            \Tpl::assign('promotion', get_promotion_info($goods_id));//促销信息
            \Tpl::assign('promotion_info', get_promotion_info());

            /* 获得商品的信息 */
            $goods = get_goods_info($goods_id);

            if ($goods === false) {
                /* 如果没有找到任何记录则跳回到首页 */
                ecs_header("Location: ./\n");
                exit;
            } else {
                if ($goods['brand_id'] > 0) {
                    $goods['goods_brand_url'] = build_uri('brand', array('bid' => $goods['brand_id']), $goods['goods_brand']);
                }

                $shop_price = $goods['shop_price'];
                $linked_goods = get_linked_goods($goods_id);

                $goods['goods_style_name'] = add_style($goods['goods_name'], $goods['goods_name_style']);

                /* 购买该商品可以得到多少钱的红包 */
                if ($goods['bonus_type_id'] > 0) {
                    $time = gmtime();
                    $sql = "SELECT type_money FROM " . $ecs->table('bonus_type') .
                        " WHERE type_id = '$goods[bonus_type_id]' " .
                        " AND send_type = '" . SEND_BY_GOODS . "' " .
                        " AND send_start_date <= '$time'" .
                        " AND send_end_date >= '$time'";
                    $goods['bonus_money'] = floatval($db->getOne($sql));
                    if ($goods['bonus_money'] > 0) {
                        $goods['bonus_money'] = price_format($goods['bonus_money']);
                    }
                }

                \Tpl::assign('goods', $goods);
                \Tpl::assign('goods_id', $goods['goods_id']);
                \Tpl::assign('promote_end_time', $goods['gmt_end_time']);
                \Tpl::assign('categories', get_categories_tree($goods['cat_id']));  // 分类树

                /* meta */
                \Tpl::assign('keywords', htmlspecialchars($goods['keywords']));
                \Tpl::assign('description', htmlspecialchars($goods['goods_brief']));


                $catlist = array();
                foreach (get_parent_cats($goods['cat_id']) as $k => $v) {
                    $catlist[] = $v['cat_id'];
                }

                assign_template('c', $catlist);

                /* 上一个商品下一个商品 */
                $prev_gid = $db->getOne("SELECT goods_id FROM " . $ecs->table('goods') . " WHERE cat_id=" . $goods['cat_id'] . " AND goods_id > " . $goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0 LIMIT 1");
                if (!empty($prev_gid)) {
                    $prev_good['url'] = build_uri('goods', array('gid' => $prev_gid), $goods['goods_name']);
                    \Tpl::assign('prev_good', $prev_good);//上一个商品
                }

                $next_gid = $db->getOne("SELECT max(goods_id) FROM " . $ecs->table('goods') . " WHERE cat_id=" . $goods['cat_id'] . " AND goods_id < " . $goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0");
                if (!empty($next_gid)) {
                    $next_good['url'] = build_uri('goods', array('gid' => $next_gid), $goods['goods_name']);
                    \Tpl::assign('next_good', $next_good);//下一个商品
                }

                $position = assign_ur_here($goods['cat_id'], $goods['goods_name']);

                /* current position */
                \Tpl::assign('page_title', $position['title']);                    // 页面标题
                \Tpl::assign('ur_here', $position['ur_here']);                  // 当前位置

                $properties = get_goods_properties($goods_id);  // 获得商品的规格和属性

                \Tpl::assign('properties', $properties['pro']);                              // 商品属性
                \Tpl::assign('specification', $properties['spe']);                              // 商品规格
                \Tpl::assign('attribute_linked', get_same_attribute_goods($properties));           // 相同属性的关联商品
                \Tpl::assign('related_goods', $linked_goods);                                   // 关联商品
                \Tpl::assign('goods_article_list', get_linked_articles($goods_id));                  // 关联文章
                \Tpl::assign('fittings', get_goods_fittings(array($goods_id)));                   // 配件
                \Tpl::assign('rank_prices', get_user_rank_prices($goods_id, $shop_price));    // 会员等级价格
                \Tpl::assign('pictures', get_goods_gallery($goods_id));                    // 商品相册
                \Tpl::assign('bought_goods', get_also_bought($goods_id));                      // 购买了该商品的用户还购买了哪些商品
                \Tpl::assign('goods_rank', get_goods_rank($goods_id));                       // 商品的销售排名

                //获取tag
                $tag_array = get_tags($goods_id);
                \Tpl::assign('tags', $tag_array);                                       // 商品的标记

                //获取关联礼包
                $package_goods_list = get_package_goods_list($goods['goods_id']);
                \Tpl::assign('package_goods_list', $package_goods_list);    // 获取关联礼包

                assign_dynamic('goods');
                $volume_price_list = get_volume_price_list($goods['goods_id'], '1');
                \Tpl::assign('volume_price_list', $volume_price_list);    // 商品优惠价格区间
            }
        }

        /* 记录浏览历史 */
        if (!empty($_COOKIE['ECS']['history'])) {
            $history = explode(',', $_COOKIE['ECS']['history']);

            array_unshift($history, $goods_id);
            $history = array_unique($history);

            while (count($history) > $_CFG['history_number']) {
                array_pop($history);
            }

            setcookie('ECS[history]', implode(',', $history), gmtime() + 3600 * 24 * 30);
        } else {
            setcookie('ECS[history]', $goods_id, gmtime() + 3600 * 24 * 30);
        }


        /* 更新点击次数 */
        $db->query('UPDATE ' . $ecs->table('goods') . " SET click_count = click_count + 1 WHERE goods_id = '\Input::get(id)'");

        \Tpl::assign('now_time', gmtime());           // 当前系统时间
        \Tpl::display('goods.dwt', $cache_id);


        return view('shop::index');


    }

}


/*------------------------------------------------------ */
//-- PRIVATE FUNCTION
/*------------------------------------------------------ */

/**
 * 获得指定商品的关联商品
 *
 * @access  public
 * @param   integer $goods_id
 * @return  array
 */
function get_linked_goods($goods_id)
{
    $sql = 'SELECT g.goods_id, g.goods_name, g.goods_thumb, g.goods_img, g.shop_price AS org_price, ' .
        "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, " .
        'g.market_price, g.promote_price, g.promote_start_date, g.promote_end_date ' .
        'FROM ' . \ECS::table('link_goods') . ' lg ' .
        'LEFT JOIN ' . \ECS::table('goods') . ' AS g ON g.goods_id = lg.link_goods_id ' .
        "LEFT JOIN " . \ECS::table('member_price') . " AS mp " .
        "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' " .
        "WHERE lg.goods_id = '$goods_id' AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 " .
        "LIMIT " . $GLOBALS['_CFG']['related_goods_number'];
    $res = \Ecdb::query($sql);

    $arr = array();
    while ($row = \Ecdb::fetchRow($res)) {
        $arr[ $row['goods_id'] ]['goods_id'] = $row['goods_id'];
        $arr[ $row['goods_id'] ]['goods_name'] = $row['goods_name'];
        $arr[ $row['goods_id'] ]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
            sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
        $arr[ $row['goods_id'] ]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true);
        $arr[ $row['goods_id'] ]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']);
        $arr[ $row['goods_id'] ]['market_price'] = price_format($row['market_price']);
        $arr[ $row['goods_id'] ]['shop_price'] = price_format($row['shop_price']);
        $arr[ $row['goods_id'] ]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);

        if ($row['promote_price'] > 0) {
            $arr[ $row['goods_id'] ]['promote_price'] = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
            $arr[ $row['goods_id'] ]['formated_promote_price'] = price_format($arr[ $row['goods_id'] ]['promote_price']);
        } else {
            $arr[ $row['goods_id'] ]['promote_price'] = 0;
        }
    }

    return $arr;
}

/**
 * 获得指定商品的关联文章
 *
 * @access  public
 * @param   integer $goods_id
 * @return  void
 */
function get_linked_articles($goods_id)
{
    $sql = 'SELECT a.article_id, a.title, a.file_url, a.open_type, a.add_time ' .
        'FROM ' . \ECS::table('goods_article') . ' AS g, ' .
        \ECS::table('article') . ' AS a ' .
        "WHERE g.article_id = a.article_id AND g.goods_id = '$goods_id' AND a.is_open = 1 " .
        'ORDER BY a.add_time DESC';
    $res = \Ecdb::query($sql);

    $arr = array();
    while ($row = \Ecdb::fetchRow($res)) {
        $row['url'] = $row['open_type'] != 1 ?
            build_uri('article', array('aid' => $row['article_id']), $row['title']) : trim($row['file_url']);
        $row['add_time'] = local_date($GLOBALS['_CFG']['date_format'], $row['add_time']);
        $row['short_title'] = $GLOBALS['_CFG']['article_title_length'] > 0 ?
            sub_str($row['title'], $GLOBALS['_CFG']['article_title_length']) : $row['title'];

        $arr[] = $row;
    }

    return $arr;
}

/**
 * 获得指定商品的各会员等级对应的价格
 *
 * @access  public
 * @param   integer $goods_id
 * @return  array
 */
function get_user_rank_prices($goods_id, $shop_price)
{
    $sql = "SELECT rank_id, IFNULL(mp.user_price, r.discount * $shop_price / 100) AS price, r.rank_name, r.discount " .
        'FROM ' . \ECS::table('user_rank') . ' AS r ' .
        'LEFT JOIN ' . \ECS::table('member_price') . " AS mp " .
        "ON mp.goods_id = '$goods_id' AND mp.user_rank = r.rank_id " .
        "WHERE r.show_price = 1 OR r.rank_id = '$_SESSION[user_rank]'";
    $res = \Ecdb::query($sql);

    $arr = array();
    while ($row = \Ecdb::fetchRow($res)) {

        $arr[ $row['rank_id'] ] = array(
            'rank_name' => htmlspecialchars($row['rank_name']),
            'price'     => price_format($row['price']));
    }

    return $arr;
}

/**
 * 获得购买过该商品的人还买过的商品
 *
 * @access  public
 * @param   integer $goods_id
 * @return  array
 */
function get_also_bought($goods_id)
{
    $sql = 'SELECT COUNT(b.goods_id ) AS num, g.goods_id, g.goods_name, g.goods_thumb, g.goods_img, g.shop_price, g.promote_price, g.promote_start_date, g.promote_end_date ' .
        'FROM ' . \ECS::table('order_goods') . ' AS a ' .
        'LEFT JOIN ' . \ECS::table('order_goods') . ' AS b ON b.order_id = a.order_id ' .
        'LEFT JOIN ' . \ECS::table('goods') . ' AS g ON g.goods_id = b.goods_id ' .
        "WHERE a.goods_id = '$goods_id' AND b.goods_id <> '$goods_id' AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 " .
        'GROUP BY b.goods_id ' .
        'ORDER BY num DESC ' .
        'LIMIT ' . $GLOBALS['_CFG']['bought_goods'];
    $res = \Ecdb::query($sql);

    $key = 0;
    $arr = array();
    while ($row = \Ecdb::fetchRow($res)) {
        $arr[ $key ]['goods_id'] = $row['goods_id'];
        $arr[ $key ]['goods_name'] = $row['goods_name'];
        $arr[ $key ]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
            sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
        $arr[ $key ]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true);
        $arr[ $key ]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']);
        $arr[ $key ]['shop_price'] = price_format($row['shop_price']);
        $arr[ $key ]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);

        if ($row['promote_price'] > 0) {
            $arr[ $key ]['promote_price'] = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
            $arr[ $key ]['formated_promote_price'] = price_format($arr[ $key ]['promote_price']);
        } else {
            $arr[ $key ]['promote_price'] = 0;
        }

        $key++;
    }

    return $arr;
}

/**
 * 获得指定商品的销售排名
 *
 * @access  public
 * @param   integer $goods_id
 * @return  integer
 */
function get_goods_rank($goods_id)
{
    /* 统计时间段 */
    $period = intval($GLOBALS['_CFG']['top10_time']);
    if ($period == 1) // 一年
    {
        $ext = " AND o.add_time > '" . local_strtotime('-1 years') . "'";
    } elseif ($period == 2) // 半年
    {
        $ext = " AND o.add_time > '" . local_strtotime('-6 months') . "'";
    } elseif ($period == 3) // 三个月
    {
        $ext = " AND o.add_time > '" . local_strtotime('-3 months') . "'";
    } elseif ($period == 4) // 一个月
    {
        $ext = " AND o.add_time > '" . local_strtotime('-1 months') . "'";
    } else {
        $ext = '';
    }

    /* 查询该商品销量 */
    $sql = 'SELECT IFNULL(SUM(g.goods_number), 0) ' .
        'FROM ' . \ECS::table('order_info') . ' AS o, ' .
        \ECS::table('order_goods') . ' AS g ' .
        "WHERE o.order_id = g.order_id " .
        "AND o.order_status = '" . OS_CONFIRMED . "' " .
        "AND o.shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) .
        " AND o.pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) .
        " AND g.goods_id = '$goods_id'" . $ext;
    $sales_count = \Ecdb::getOne($sql);

    if ($sales_count > 0) {
        /* 只有在商品销售量大于0时才去计算该商品的排行 */
        $sql = 'SELECT DISTINCT SUM(goods_number) AS num ' .
            'FROM ' . \ECS::table('order_info') . ' AS o, ' .
            \ECS::table('order_goods') . ' AS g ' .
            "WHERE o.order_id = g.order_id " .
            "AND o.order_status = '" . OS_CONFIRMED . "' " .
            "AND o.shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) .
            " AND o.pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) . $ext .
            " GROUP BY g.goods_id HAVING num > $sales_count";
        $res = \Ecdb::query($sql);

        $rank = \Ecdb::num_rows($res) + 1;

        if ($rank > 10) {
            $rank = 0;
        }
    } else {
        $rank = 0;
    }

    return $rank;
}

/**
 * 获得商品选定的属性的附加总价格
 *
 * @param   integer $goods_id
 * @param   array   $attr
 *
 * @return  void
 */
function get_attr_amount($goods_id, $attr)
{
    $sql = "SELECT SUM(attr_price) FROM " . \ECS::table('goods_attr') .
        " WHERE goods_id='$goods_id' AND " . db_create_in($attr, 'goods_attr_id');

    return \Ecdb::getOne($sql);
}

/**
 * 取得跟商品关联的礼包列表
 *
 * @param   string $goods_id 商品编号
 *
 * @return  礼包列表
 */
function get_package_goods_list($goods_id)
{
    $now = gmtime();
    $sql = "SELECT pg.goods_id, ga.act_id, ga.act_name, ga.act_desc, ga.goods_name, ga.start_time,
                   ga.end_time, ga.is_finished, ga.ext_info
            FROM " . \ECS::table('goods_activity') . " AS ga, " . \ECS::table('package_goods') . " AS pg
            WHERE pg.package_id = ga.act_id
            AND ga.start_time <= '" . $now . "'
            AND ga.end_time >= '" . $now . "'
            AND pg.goods_id = " . $goods_id . "
            GROUP BY ga.act_id
            ORDER BY ga.act_id ";
    $res = \Ecdb::getAll($sql);

    foreach ($res as $tempkey => $value) {
        $subtotal = 0;
        $row = unserialize($value['ext_info']);
        unset($value['ext_info']);
        if ($row) {
            foreach ($row as $key => $val) {
                $res[ $tempkey ][ $key ] = $val;
            }
        }

        $sql = "SELECT pg.package_id, pg.goods_id, pg.goods_number, pg.admin_id, p.goods_attr, g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS rank_price
                FROM " . \ECS::table('package_goods') . " AS pg
                    LEFT JOIN " . \ECS::table('goods') . " AS g
                        ON g.goods_id = pg.goods_id
                    LEFT JOIN " . \ECS::table('products') . " AS p
                        ON p.product_id = pg.product_id
                    LEFT JOIN " . \ECS::table('member_price') . " AS mp
                        ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]'
                WHERE pg.package_id = " . $value['act_id'] . "
                ORDER BY pg.package_id, pg.goods_id";

        $goods_res = \Ecdb::getAll($sql);

        foreach ($goods_res as $key => $val) {
            $goods_id_array[] = $val['goods_id'];
            $goods_res[ $key ]['goods_thumb'] = get_image_path($val['goods_id'], $val['goods_thumb'], true);
            $goods_res[ $key ]['market_price'] = price_format($val['market_price']);
            $goods_res[ $key ]['rank_price'] = price_format($val['rank_price']);
            $subtotal += $val['rank_price'] * $val['goods_number'];
        }

        /* 取商品属性 */
        $sql = "SELECT ga.goods_attr_id, ga.attr_value
                FROM " . \ECS::table('goods_attr') . " AS ga, " . \ECS::table('attribute') . " AS a
                WHERE a.attr_id = ga.attr_id
                AND a.attr_type = 1
                AND " . db_create_in($goods_id_array, 'goods_id');
        $result_goods_attr = \Ecdb::getAll($sql);

        $_goods_attr = array();
        foreach ($result_goods_attr as $value) {
            $_goods_attr[ $value['goods_attr_id'] ] = $value['attr_value'];
        }

        /* 处理货品 */
        $format = '[%s]';
        foreach ($goods_res as $key => $val) {
            if ($val['goods_attr'] != '') {
                $goods_attr_array = explode('|', $val['goods_attr']);

                $goods_attr = array();
                foreach ($goods_attr_array as $_attr) {
                    $goods_attr[] = $_goods_attr[ $_attr ];
                }

                $goods_res[ $key ]['goods_attr_str'] = sprintf($format, implode('，', $goods_attr));
            }
        }

        $res[ $tempkey ]['goods_list'] = $goods_res;
        $res[ $tempkey ]['subtotal'] = price_format($subtotal);
        $res[ $tempkey ]['saving'] = price_format(($subtotal - $res[ $tempkey ]['package_price']));
        $res[ $tempkey ]['package_price'] = price_format($res[ $tempkey ]['package_price']);
    }

    return $res;
}
